package com.kinggm.controller;

import com.kinggm.ano.ApiLimit;
import com.kinggm.ano.RedisApiLimit;
import com.kinggm.constants.LimitTypeEnum;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/test")
public class ApiLimitController {


    /**
     * 单机模式的接口限流(使用AOP + 自定义注解 + guava的RateLimiter工具类)
     */
    @GetMapping("/aa")
    // demo    对/test/aa 接口 1秒钟 只能访问0.5次  也就是  2秒钟访问一次
    @ApiLimit(key = "/test/aa", count = 0.5)
    public String testAA() {
        return "aa";
    }


    /**
     * 分布式接口限流(使用AOP + 自定义注解 + Redis + lua脚本)
     */
    @GetMapping("/bb")
    // demo 同一个ip 对/test/bb接口 10秒内 只允许请求1次
    @RedisApiLimit(key = "/test/bb", count = 1, period = 10, limitType = LimitTypeEnum.IP)
    public String testBB() {
        return "bb";
    }


}
